package command;

import beans.InvitationBean;
import beans.ListeInvitations;
import beans.ListeSuivis;
import beans.SuiviBean;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.*;

/**
 * @author Antonin Mozzati
 * @author Yannick Schürter
 */
public class InvitationsCommand implements Command {

    @Override
    public String getCommandName() {
	return "invitationsCommand";
    }

    @Override
    public ActionFlow actionPerform(HttpServletRequest request) {
	String vue = "invitations";
	String erreur = "erreur";
	String index = "index";

	System.out.println(this.getCommandName());

	// Récupération de l'ID en session nécessaire à la création du flux
	HttpSession session = request.getSession(false);
	int sessionID;
	if (session.getAttribute("sessionID") != null) {
	    sessionID = (Integer) session.getAttribute("sessionID");
	} else {
	    // Si l'ID n'est pas dans la session, on redirige vers la page d'accueil
	    return new ActionFlow(index, index + ".jsp", false);
	}

	// Redirection avant traitement si aucun formulaire n'a pas été soumis
	if (request.getParameter("reponseSubmit") == null) {
	    return new ActionFlow(vue, vue + ".jsp", false);
	}

	ListeInvitations listeInvitations;
	ListeSuivis listeSuivis;
	try {
	    // On récupère la liste de flux du ServletContext
	    listeInvitations = (ListeInvitations) request.getServletContext().getAttribute("listeInvitations");
	    // On récupère la liste de tags du ServletContext
	    listeSuivis = (ListeSuivis) request.getServletContext().getAttribute("listeSuivis");
	} catch (Exception ex) {
	    Logger.getLogger(InvitationsCommand.class.getName()).log(Level.SEVERE, null, ex);
	    return new ActionFlow(erreur, erreur + ".html", true);
	}

	int id_invitation = Integer.parseInt(request.getParameter("id_invitation"));
        String reponse = request.getParameter("reponseSubmit");

	// Si réponse positive, on abonne
	if (reponse.equals("Accepter")) {
            InvitationBean ib = listeInvitations.getById(id_invitation);
            listeSuivis.addSuivi(new SuiviBean(0, ib.getId_utilisateur(), ib.getId_flux(), ib.getPeutPoster()));
	}
        // Que la réponse soit positive ou négative, on supprime l'invitation
        listeInvitations.removeInvitation(id_invitation);
        
	return new ActionFlow(vue, vue + ".jsp", false);
    }
}
